package pr.vodafone.resources;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;

import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Request;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;

import pr.vodafone.dao.dto.Cliente;
import pr.vodafone.service.ServiceProvider;


// Will map the resource to the URL CLientes
@Path("/clientes")
public class ClientesResource {

	@Context
	UriInfo uriInfo;
	@Context
	Request request;
	
	
	@GET
	@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
	public List<Cliente> getTodos() {
		List<Cliente> todos = new ArrayList<Cliente>();
		ServiceProvider sp = new ServiceProvider();
		todos.addAll( sp.obtenerClientes() );
		return todos; 
	}
	
	@POST
	@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
	public Response newClient(Cliente cliente) {
		Response res;
		ServiceProvider sp = new ServiceProvider();
		if(sp.obtenerCliente(cliente.getDni())!= null) {
			//el cliente ya existe, error
			res = Response.status(409).entity("Post: Client with " + cliente.getDni() +  " already exists").build();
		}else{
			URI uri = uriInfo.getAbsolutePathBuilder().path(cliente.getDni()).build();			
			boolean inserted=sp.insertarCliente(cliente);
			if (inserted){
				res = Response.created(uri).entity(cliente).build(); // Code: 201
			}else{
				//error al insertar
				res = Response.status(404).entity("ERROR").build();
			}
		}		
		return res;
	}
	

	@Path("{cliente}")
	public ClienteResource getCliente(
			@PathParam("cliente") String dni) {
		return new ClienteResource(dni);
	}
}
